package algo;
import tree.*;

/**
* Classe appliquant l'etape de partitionnement
* @author Kevin Georgy
* @since 13.06.2007	
* @version 1.0
*/
public class PartitionStep extends Step {
	
	/**
	* Construit l'etape de partitionnement
	* @param aQuickSort QuickSort que l'etape doit modifier
	*/	
	PartitionStep(QuickSort aQuickSort) {
		super(aQuickSort);
	}
	
	/**
	* Applique l'etape de partitionnement
	* @return Etape suivante
	*/	
	Step apply() {
		super.apply();
		
		// Text explicatif
		tutoText += "D\u00E9finition de 2 partitions";
		
		// Ajoute les partition a l'arbre de tri
		quickSort.state().current.connectLeft(
			new Tree<Partition>(
				new Partition(
					quickSort.state().current.getContent().begin, 
					quickSort.state().rightCursor
				)
			)
		);
		quickSort.state().current.connectRight(
			new Tree<Partition>(
				new Partition(
					quickSort.state().leftCursor(), 
					quickSort.state().current.getContent().end
				)
			)
		);
		
		// Mise a jour de la partition courante -> Partition de gauche
		quickSort.state().current.getContent().isCurrent = false;
		quickSort.state().current = quickSort.state().current.left();
		quickSort.state().current.getContent().isCurrent = true;
		
		// Definit la prochaine etape
		return quickSort.steps().define();
			
	}
	
	/**
	* Indique le nom de l'etape
	* @return Nom de l'etape
	*/	
	public String stepName() {
		return "Etape de partitionnement";
	}
	
}
